#pragma once
#include <algorithm>
#include <array>
#include <cassert>
#include <forward_list>
#include <functional>
#include <iostream>
#include <istream>
#include <list>
#include <map>
#include <ostream>
#include <queue>
#include <set>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <numeric>

#include <cstdarg>
#include <sstream>
#include <string>

#include <climits>
#include <cmath>
#include <ctime>
#include <random>
#include <utility>

#include "CommonService/CommonServiceInclude.h"
#include "Json/json/json.h"

#pragma comment(lib,"CommonService.lib")
#pragma comment(lib,"Json.lib")

#ifdef DEV_TEST
#include <gtest/gtest.h>
#pragma comment(lib,"gtestd.lib")
#pragma comment(lib,"gtest_maind.lib")
#endif


#define ARRAY_SIZE(arr)\
	(sizeof(arr)/sizeof(arr[0]))

template<typename T>
void PrintData(T* data, int size);

template<typename T>
void PrintData(T* data, int left, int right);

template<typename T>
void Swap(T& left, T& right);

template<typename T>
int Compare(const T* left, const T* right);
template<typename T>
int Compare(T* left, T* right);
template<typename T>
int Compare(const T& left, const T& right);
template<typename T>
int Compare(T& left, T& right);

template<typename T>
void CheckInOrder(T* data, int size);

//signed/unsigned mismatch
#pragma warning(disable:4018) 

//possible loss of data
#pragma warning(disable:4267)
#pragma warning(disable:4244) 